package com.baofu.paycore.dal.mapper;

import com.baofu.paycore.dal.mapper.base.GenericMapper;
import com.baofu.paycore.dal.model.PreAuthDO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 预授权Mapper
 * <p>
 *  1.依订单号查询预授权信息
 *  2.依支付单号查询预授权信息
 * </p>
 * User: xin deng  Date: 16/8/30 ProjectName: paycore Version: 1.0
 */
public interface PreAuthMapper extends GenericMapper<PreAuthDO>{

    /**
     * 依订单号查询预授权信息
     *
     * @param requestOrderNo        请求订单号
     * @param requestBizNo          请求业务编号
     * @param requestSystem         请求系统
     * @return                      预授权信息
     */
    PreAuthDO selectByOrderNo(@Param("requestOrderNo") String requestOrderNo,
                              @Param("requestBizNo") String requestBizNo,
                              @Param("requestSystem") String requestSystem);

    /**
     * 依支付单号查询预授权信息
     *
     * @param payNo                 支付单号
     * @return                      预授权信息
     */
    PreAuthDO selectByPayNo(String payNo);

    /**
     * 获取预授权信息
     *
     * @param preAuthDO             请求参数
     * @return                      预授权信息
     */
    PreAuthDO selectByParams(PreAuthDO preAuthDO);

    /**
     * 更新处理金额
     *
     * @param preAuthDO             请求参数
     * @return                      更新
     */
    int updateDealAmt(PreAuthDO preAuthDO);

    /**
     * 依原支付单号查询预授权信息
     *
     * @param origPayNo             原支付单号
     * @return                      预授权信息
     */
    PreAuthDO selectByOrigPayNo(String origPayNo);

    /**
     * 分页查询预授权信息
     *
     * @param bean                  查询参数
     * @param beginPage             开始行
     * @param endPage               结束行
     * @return                      预授权信息
     */
    List<PreAuthDO> selectPreAuthPage(@Param("bean") PreAuthDO bean,
                                      @Param("beginPage") Integer beginPage,
                                      @Param("endPage") Integer endPage);

    /**
     * 查询预授权信息总数
     *
     * @param bean                  查询参数
     * @return                      总数
     */
    int selectPreAuthCount(@Param("bean") PreAuthDO bean);

    /**
     * 根据支付号获取
     *
     * @param requestOrderNo 请求订单号
     * @param requestBizNo   请求流水号
     * @return 转账单
     */
    PreAuthDO selectByOrderNoAndBizNo(@Param("requestOrderNo") String requestOrderNo,
                                       @Param("requestBizNo")   String requestBizNo,
                                       @Param("requestSystem")  String requestSystem,
                                       @Param("requestDate") Date requestDate);

}
